#include <iostream>
#include "httplib.h"

//hw路径响应
void HelloWord(const httplib::Request& req,httplib::Response& res)
{
    //设置内容为文本
    res.set_content(R"(Hello Word!)", "text/plain");
    res.status = 200;
    return;
}

//数字响应
void Numbers(const httplib::Request& req,httplib::Response& res)
{
    //matches[0]是完整路径 matches[1 2 ...n] 是从路径中补货的参数
    auto number = req.matches[1];
    res.set_content(number,"text/plain");
    res.status = 200;
    return;
}

//客户端上传文件响应 如果上传file文件则返回文件内容
void Files(const httplib::Request& req,httplib::Response& res)
{
    //
    auto ret = req.has_file("file");
    if(ret == false)
    {
        res.set_content("Not File Unload!","text/plain");
        res.status = 400;
        return;
    }
    //如果接收到了file文件 则提取
    const auto& file = req.get_file_value("file");

    //返回文件内容
    res.body.clear();
    res.body += "File Name: " + file.filename + "\n";
    res.body += "File Content Type: " + file.content_type + "\n";
    res.body += "File Content: " + file.content;
    res.set_header("Content-Type","text/plain"); //在报头中告诉客户端是文本内容
    res.status = 200;
    return;
}


int main()
{
    httplib::Server ser;
    //添加get请求对应的业务方法
    ser.Get("/hw",HelloWord);
    //匹配一个或多个数字
    ser.Get(R"(/numbers/(\d+))",Numbers);
    ser.Post("/files",Files);
    //接收任意IP的访问 开放8668端口
    ser.listen("0.0.0.0",8668);
    return 0;
}
